#include<iostream>
#include<cstring>
#include<signal.h>
#include<sys/wait.h>
#include<unistd.h>

using namespace std;
// void PrintPending()
// {
//     sigset_t set;
//     sigpending(&set);
//     for(int signo=1;signo<=31;signo++)
//     {
//         if(sigismember(&set,signo)) cout<<"1";
//         else cout<<"0";
//     }
//     cout<<"\n";
// }
// void handler(int sigo)
// {
//     PrintPending(); 
//     cout<<"catch a signal,number: "<<sigo<<endl;
// }
// int main()
// {
//     struct sigaction act,oact;
//     memset(&act,0,sizeof(act));//清空
//     memset(&oact,0,sizeof(oact));
//     act.sa_handler=handler;
//     sigaction(2,&act,&oact);
//     while(true)
//     {
//         cout<<"i am process: "<<getpid()<<endl;
//         sleep(1);
//     }

// }

void handler(int signo)
{
    pid_t rid=waitpid(-1,nullptr,0);
    cout<<"I am process: "<<getpid()<<"catch a signo "<<signo<<"child quit fork: "<<rid<<endl;

}
int main()
{
    //10子进程同时退出呢

    signal(17,SIG_IGN);// -->action-->IGN
    pid_t id=fork();
    for(int i=0;i<10;i++)
    {
        if(id==0)
        {
            while(true)
            {
                cout<<" i am child process: "<<getpid()<<",pid: "<<getppid()<<endl;
                sleep(5);
                break;
            }
            cout<<"child quit "<<endl;
            exit(0);
        }

        while(true)
        {
            cout<<" father process: "<<getpid()<<endl;
            sleep(1);
        }
    }
}